package design.future;

/**
 * 真实数据代理类，里面包含过去真实数据的方法
 * 当用户请求时，就把先把代理对象返回给客户端，提高响应速度
 * 当用户需要使用真实诗句的时候，再通过getRealData方法返回真实数据
 */
// 模拟future模式
public class FutrueData implements Data{
    // 真实数据的引用
    private RealData realData;
    // 标记是否准备好了
    private boolean isReady = false;

    public synchronized String getRealData(){
        // 如果数据没有准备好，则阻塞
        if(!isReady){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return realData.getRealData();
    }
    public synchronized void initRealData(String param){
        // 如果数据已经准备完毕，就直接返回，释放对象锁
        if(isReady){
            return;
        }
        // 如果数据没有准备完毕 则是哟个参数初始化
        realData = new RealData().initRealData(param);
        isReady = true;
        notify();
    }

}
